83. Remove Duplicates from Sorted List
Question
Given the head
of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
Example 1:
Input: head = [1,1,2]
Output: [1,2]
Example 2:
Input: head = [1,1,2,3,3]
Output: [1,2,3]
Constraints:
The number of nodes in the list is in the range [0, 300].
-100 <= Node.val <= 100
The list is guaranteed to be sorted in ascending order.
Approach
- If the
head
is empty, return. - Traverse the nodes, and compae its values to the next node.
- If the values are the same, save the next->next node for later.
- Delete the next node (since it is a duplicate).
- Link the node saved just now to the next of current node.
- Only move one node forward if there is no deletion of nodes.
Solution
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL) return head;
ListNode* curr = head;
ListNode* next = NULL;
while(curr -> next != NULL){
if(curr->val == curr->next->val){
next = curr->next->next;
delete curr->next;
curr->next = next;
}else{
curr = curr->next;
}
}
return head;
}
};